﻿/*
组合数 
Time Limit:1000MS  Memory Limit:32768K


Description:
贝贝的老师问了，在1、2、3、4、5这五个不同的数字中取出3个数字，取法数会有几个？贝贝摆弄了半天，终于回答说，是10个。那么，在这五个数字中取出2个数字，这种取法又会有几个呢？坐在贝贝旁边的同学回答说，也是10个。咦，贝贝差一点想说，那应该要少于10个。如果是我们也这样想，那真令人汗颜哪！就是这些说难不难的问题困惑着小学生们。像这种在多个元素中取出其中的几个，有几种取法，实际上就是数学上叫作组合数的东西。现在请你用快速而科学的计算，来给这些小朋友们解惑吧，当然就得要借助于编程了。 

Input:
输入数据中包含了不多于50对的正整数n，m（m≤n≤20）。 
Output:
对于每对整数n、m，输出在n个元素中选取m个元素的组合数。每个这样的组合数独立占一行。 
Sample Input:
5 2
18 13
Sample Output:
10
8568
*/

#include <iostream>
using namespace std;

typedef unsigned long ulong;
typedef unsigned int uint;

inline ulong comb(uint n, uint m)
{
	ulong result=1UL;
	if(!(m==n || 0==m))
	{
		if((m+m)>n)
			m=n-m;
		
		for (uint i=1u; i<=m; i++)
		{
			//依此顺序定能整除
			result=result*(n-m+i)/i;
		}
	}

	return result;
}

int main()
{
	for (uint n, m; cin>>n>>m;)
	{
		cout<<comb(n, m)<<endl;
	}
	return 0;
}